/**
 * Created by zhourh on 2018/9/19.
 *
 * 如果数组是单调递增或单调递减的，那么它是单调的。

 如果对于所有 i <= j，A[i] <= A[j]，那么数组 A 是单调递增的。 如果对于所有 i <= j，A[i]> = A[j]，那么数组 A 是单调递减的。

 当给定的数组 A 是单调数组时返回 true，否则返回 false。



 示例 1：

 输入：[1,2,2,3]
 输出：true
 示例 2：

 输入：[6,5,4,4]
 输出：true
 示例 3：

 输入：[1,3,2]
 输出：false
 示例 4：

 输入：[1,2,4,5]
 输出：true
 示例 5：

 输入：[1,1,1]
 输出：true


 提示：

 1 <= A.length <= 50000
 -100000 <= A[i] <= 100000
 *
 */
public class MonotonicArray {

    public static void main(String[] args) {
        System.out.println(new MonotonicArray().isMonotonic(new int[]{1,2,2,3}));
        System.out.println(new MonotonicArray().isMonotonic(new int[]{6,5,4,4}));
        System.out.println(new MonotonicArray().isMonotonic(new int[]{1,3,2}));
        System.out.println(new MonotonicArray().isMonotonic(new int[]{1,2,4,5}));
        System.out.println(new MonotonicArray().isMonotonic(new int[]{1,1,1}));
        System.out.println(new MonotonicArray().isMonotonic(new int[]{3,3,3,2,3}));
        System.out.println(new MonotonicArray().isMonotonic(new int[]{-11,-11,-9,-4,-3,-3,-3,-1,1,1,-3,-3,-3,-5,-5,-5}));
    }

    public boolean isMonotonic(int[] A) {
        if (A == null || A.length == 0 ) {
            return false;
        }

        if (A.length == 1) {
            return true;
        }

        boolean increasing = true;
        boolean decreasing = true;

        for (int i = 1; i < A.length; i++) {
            if (increasing && A[i] >= A[i - 1]) {
                if (decreasing && A[i] > A[i - 1]) {
                    decreasing = false;
                }
                continue;
            }
            if (decreasing && A[i] <= A[i - 1]) {
                if (increasing && A[i] < A[i - 1]) {
                    increasing = false;
                }
                continue;
            }

            return false;
        }

        return true;

    }
}
